"""
本算法通过被测对象的电流值ic通过预设的模糊算法计算出被测对象的安全系数。
通过预设的分段模糊函数判断输入的电流值ic处于哪一函数区间并根据对应的区间函数计算得到安全系数。
最终通过比较计算得到的安全系数和预设的安全系数下限判断是否异常，若异常输出1，正常输出0。
"""
import math
import pandas as pd


def fuzzy_safe(ic):
    safe = 0.0

    if abs(ic) <= 1.75:
        safe = 9 * (ic / 3.5) ** 2
    elif abs(ic) <= 3.5:
        safe = 4.5 - 9 * ((ic - 3.5) / 3.5) ** 2
    elif abs(ic) <= 35:
        safe = 4.8006 * math.exp(-0.018 * ic)
    elif abs(ic) <= 60:
        safe = 2.55 * ((60 - ic) / 25) ** 2
    else:
        safe = 0

    return safe


def fuzzy_safe_route(data_path):
    jug_list = []
    suffix = data_path.split(".")[1]
    #如果输入文件是xlsx格式的。
    if suffix == "xlsx":
        data = pd.read_excel(data_path)
        for i in range(len(data)):
            ic = data.iloc[i,0]
            # 调用算法函数
            safe = fuzzy_safe(ic)
            if safe < 0.85:
                jug = 1
                jug_list.append([jug])
            else:
                jug = 0
                jug_list.append([jug])


    #如果输入文件是txt格式的。
    if suffix == "txt":
        with open(data_path, "r", encoding='utf-8') as file:
            for line in file:
                if line.startswith("Current:") and line.count(';') == 1:
            #筛选并存储算法输入数据
                    parts = line.strip().split(';')
                    ic = float(parts[0].split(':')[1])
                    # 调用算法函数
                    safe = fuzzy_safe(ic)
                    if safe < 0.85:
                        jug = 1
                        jug_list.append([jug])
                    else:
                        jug = 0
                        jug_list.append([jug])

    return jug_list


if __name__ == "__main__":
    # 读取文件路径
    data_path = 'input_fuzzy.xlsx'
    label = fuzzy_safe_route(data_path)

    # 输出label,label=0为正常点，label=1为异常点
    print('lable:', label)







